home *** CD-ROM | disk | FTP | other *** search
- /*
- * StuConfig.c
- *
- * Purpose:
- * --------
- * Routines de traitement de la configuration globale du programme
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
-
-
- #include "!OPTIONS.H" /* Options de compilation */
- #define THIS_FILE "STUCONFG.C v1.00 - 03.95"
-
-
- /*
- * System headers:
- */
- #include <stdio.h>
- #include <stdlib.h> /* Malloc... */
- #include <string.h> /* strcpy() etc.. */
- #include <aes.h> /* header AES */
-
-
- /*
- * Custom headers:
- */
- #include "SPEC_PU.H"
- #include "S_MALLOC.H"
- #include "WIN_PU.H"
- #include "STUT_ONE.RSC\STUT_3.H" /* noms des objets ds le ressource */
- #include "POPUP_PU.H" /* Menus pop-up */
- #include "SERV_PU.H" /* En ce qui concerne les voies */
- #include "DEBUG_PU.H"
- #include "SRIAL_PU.H"
- #include "RAMSL_PU.H"
- #include "MAIN_PU.H"
- #include "FILES_PU.H"
- #include "RTERR_PU.H"
-
-
-
-
-
- /*
- * ------------------------ PROTOTYPES -------------------------
- */
-
- /*
- * EXTernal prototypes:
- */
- /*
- * Traitement des objets AES:
- */
- extern void rsrc_color( OBJECT *tree );
- extern void objc_fixsel(
- OBJECT* pObj_tree, /* In: Arbre dans lequel on agit */
- int n_obj, /* In: Objet sur lequel on agit */
- int n_state ); /* In: 0=dselection, autre selectionne */
- extern BOOL objc_testsel( /* Out: !=0 si slectionn */
- OBJECT * pObj_tree, /* In: Arbre dans lequel on teste */
- int n_obj ); /* In: Objet sur lequel on teste */
- extern void objc_setdisable( OBJECT *tree, int obj );
- extern void objc_setenable( OBJECT *tree, int obj );
- extern void objc_enable( OBJECT *tree, int obj );
- extern void objc_disable( OBJECT *tree, int obj );
- extern void open_dialog( OBJECT *dialog, const GRECT *little_box, GRECT *big_box );
- extern void close_dialog( OBJECT *dialog, int exit_obj, const GRECT *little_box, const GRECT *big_box );
- extern void deselect_current( void );
- extern void dlink_teptext( OBJECT *objc_adr, const char *texte );
- extern void objc_clrsel( OBJECT *tree, int obj );
- extern GRECT* objc_xywh (
- OBJECT *tree,
- int objc,
- GRECT *frame );
-
- /*
- * Form_do:
- */
- extern int ext_form_do( OBJECT *tree, int *startfield );
- /*
- * Donnes:
- */
- extern void group_directload( DATAGROUP *curr_datagroup, int file_type, char *file_access );
- extern SSTATE get_ServSState( void ); /* Out: SSTATE global...*/
- /*
- * Desktop:
- */
- extern DATAGROUP * find_datagroup_byType( /* Out: Ptr sur datagroup */
- DATATYPE DataType ); /* In: Type DTYP_* */
-
- /*
- * Menus Pop-Up:
- */
- extern void fix_popup_title(
- OBJECT *popup_title, /* In: Objet titre de Menu */
- POPUP_ENTRY *entries, /* In: Menu Pop-Up associ */
- int current_val ); /* In: Valeur
assigner au titre */
- extern int popup_inform( /* Out: Valeur slectionne */
- OBJECT *call_form, /* In: Formulaire appellant */
- int call_obj, /* In: Objet appellant */
- int title_obj, /* In: No Objet sur lequel le menu va s'aligner (Titre de menu) */
- POPUP_ENTRY *entries, /* In: Menu Pop-Up
drouler */
- int current_val ); /* In: Valeur courante -> recevra checkmark */
-
-
- /*
- * PRIVate INTernal prototypes:
- */
- static char *cree_ligne_voie( VOIE *curr_voie );
- static int affecte_actions( LISTHANDLES *list_handles, int obj );
- static void affec_fixstate_act( /* Out: Rien */
- LISTHANDLES *list_handles ); /* In: Ptr sur infos sur la liste & le dialogue affichs */
- static void Affecte_ParamsVoie(
- LISTHANDLES *list_handles, /* In: Infos sur liste de voies */
- OBJECT *arbre_fond, /* In: Formulaire appellant */
- int call_obj ); /* In: Objet appellant ds ce formulaire */
- static VOIE* find_ParamsVoie_byOrdNo( /* Out: Ptr sur params voie cherche */
- VOIE *pVoie_Liste, /* In: Ptr sur premire voie ds liste */
- int ord ); /* In: No d'ordre de la voie cherche */
- static void ajoute_voie( LISTHANDLES *list_handles );
- static void supprime_voie( /* Out: Rien */
- LISTHANDLES *list_handles ); /* In/Out: Paramtres de la liste de slection */
-
-
-
- /*
- * ------------------------ VARIABLES -------------------------
- */
-
- /*
- * External variables:
- */
- /*
- * Gnral:
- */
- extern char *G_empty_string; /* Chaine vide */
- extern char *G_tmp_buffer; /* Peut contenir un texte long de 255 signes + '\0' */
- extern void *G_null; /* Pointeur null */
- extern char *G_crlf; /* Retour
la ligne */
- /*
- * Vdi:
- */
- extern USERBLK G_bcroix_ublk; /* Pour bouton-croix */
- /*
- * Datas:
- */
- extern DATAGROUP *G_datagroups; /* Pointeur sur tableau de G_datagroups */
- /*
- * Icnes:
- */
- extern WIPARAMS *G_desk_params_adr; /* Paramtres de la "fentre bureau" */
- /*
- * Fichiers:
- */
- extern char G_stutpath[]; /* Path dans lequel se trouve Stut One */
- extern char G_filename[]; /* Nom du fichier
charger ex:TEST.TXT */
- extern char G_filepath[]; /* Chemin du fichier
charger ex:D\EXEMPLE */
- /*
- * Serveur:
- */
- extern VOIE *G_voies; /* Liste des voies */
- extern int G_nb_voies; /* Nombre de voies */
- extern char *G_mode[]; /* Modes de fonctionnement */
- extern long G_abrev_mode[]; /* Abreviations modes */
- extern POPUP_ENTRY G_Popup_Modes[]; /* Menu Pop-Up slection Mode */
- /*
- * Ports srie:
- */
- extern int G_term_dev; /* Port utilis par icone terminal ( Sur un STF sans Bconmap: 1,AUX ) */
- extern POPUP_ENTRY *G_inst_drv_list; /* Liste des prifs installs pourmenu Popup */
- extern long *G_inst_abrev; /* Abrviations prifs installs */
-
-
- /*
- * Public variables:
- */
- /*
- * Type:
- */
- int G_cnf_gest_form_std = FALSE0; /* Gestion de formulaires Standard */
- int G_cnf_cope_with_ltf = FALSE0; /* Contourner les bugs de Let'em Fly */
-
-
- /*
- * Private variables:
- */
- /*
- * Ptrs sur botes de dialogue:
- */
- static OBJECT *M_compatib_adr; /* Boite de config compatibilit */
- static OBJECT *M_affect_adr; /* Boite d'affectation des voies */
- static OBJECT *M_pForm_ParamsVoie; /* Formulaire de config d'une voie */
- /*
- * Param des voies:
- */
- static VOIE *M_voies_copies;
-
-
- /*
- * ------------------------ FUNCTIONS -------------------------
- */
-
- /*
- * init_config(-)
- *
- * Purpose:
- * --------
- * Init des variables et des botes de configuration
- * utilises ds ce module
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void init_config( void )
- {
- /*
- * Init RSC:
- */
- if ( rsrc_gaddr( R_TREE, COMPATIB, &M_compatib_adr ) == 0 )
- erreur_rsrc();
- rsrc_color( M_compatib_adr ); /* Fixe couleurs */
-
- if ( rsrc_gaddr( R_TREE, AFFECT, &M_affect_adr ) == 0 )
- erreur_rsrc();
- rsrc_color( M_affect_adr ); /* Fixe couleurs */
-
- if ( rsrc_gaddr( R_TREE, PARAVOIE, &M_pForm_ParamsVoie ) == 0 )
- erreur_rsrc();
- rsrc_color( M_pForm_ParamsVoie ); /* Fixe couleurs */
- }
-
-
- /*
- * set_compat(-)
- *
- * Purpose:
- * --------
- * Rglage des paramtres de compatibilit de STUT ONE
- * avec son environnement:
- * - Gestion des formulaires par le Form_Do std plutt que Ex_form_do
- * - Coutourner les bugs de Let'Em Fly
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void set_compat( const GRECT *start_box )
- {
- int exit_obj; /* Objet de sortie */
- GRECT form_box; /* Dimensions du formulaire */
- int edit = 0; /* Bidon */
-
- /*
- * Fixe flags des boutons:
- */
- objc_fixsel( M_compatib_adr, GFORMSTD, G_cnf_gest_form_std );
- objc_fixsel( M_compatib_adr, TESTCOMP, G_cnf_cope_with_ltf );
-
- /*
- * Gestion bote:
- */
- /* App prend en charge souris */
- WIND_UPDATE_BEG_MCTRL
-
- open_dialog( M_compatib_adr, start_box, &form_box );
-
- exit_obj=ext_form_do( M_compatib_adr, &edit); /* Gestion de la bote */
-
- close_dialog( M_compatib_adr, exit_obj, start_box, &form_box );
-
- /* AES peut reprendre la souris */
- WIND_UPDATE_END_MCTRL
-
- /*
- * Teste s'il y a eu confirmation:
- */
- if ( exit_obj == COMPVALI )
- { /*
- * Rcupre tat des boutons:
- */
- G_cnf_gest_form_std = objc_testsel( M_compatib_adr, GFORMSTD );
- G_cnf_cope_with_ltf = objc_testsel( M_compatib_adr, TESTCOMP );
- }
- }
-
-
-
- /*
- * ------------------- TRAITEMENT FICHIER .INI --------------------
- */
-
-
- /*
- * sauver_config_ini(-)
- *
- * Purpose:
- * --------
- * Aprs slection menu:
- * Traite Demande de Sauvegarde configuration dans fichier .INI
- *
- * Algorythm:
- * ----------
- * Demande conf
- * Cre nom du fichier .INI
- * Appele 'sauve()' -> save_inidata
- *
- * History:
- * --------
- * 1993: fplanque: Created
- * 03.01.94: fplanque: Chang texte de demande de conf
- */
- void sauver_config_ini( void )
- {
- /*
- * Demande de confirmation:
- */
- int confirm = form_alert(2,
- "[2][Voulez-vous sauver la|"
- "configuration actuelle de|"
- "manire
ce qu'elle soit|"
- "recharge automatiquement|"
- "la prochaine fois?]"
- "[Sauver|Annuler]");
-
- /*
- * Selon rponse utilisateur:
- */
- if ( confirm == 1 )
- { /*
- * Si on a confirm:
- */
- strcpy( G_filepath, G_stutpath ); /* Dans le dossier STUT ONE */
- strcpy( G_filename, "STUT_000.INI" ); /* Nom du Fichier
sauver */
- /* printf("Path=%s Name=%s \n", G_filepath, G_filename ); */
-
- directsave_file( FS_INI, NULL ); /* Sauve la configuration actuelle dans ce fichier */
-
- }
- }
-
-
- /*
- * save_inidata(-)
- *
- * Purpose:
- * --------
- * Sauvegarde point par point des donnes dans les fichier .INI
- *
- * Algorythm:
- * ----------
- * Sauve:
- * -Conf ports srie
- * -Affectation des voies
- *
- * Notes:
- * ------
- *
- * Suggest:
- * --------
- * - Faire une fonc indpendante pour l'affectation des voies
- * - Inclure les paramtres de compatibilit
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void save_inidata( FILE *fstream )
- {
- /*
- * Sauve configuration des ports srie:
- */
- save_serial_ini( fstream );
-
- /*
- * Sauve affectation des voies:
- */
- {
- VOIE *curr_voie; /* Voie en cours de traitement */
- int dev_offset; /* Device offset du port affect
une voie */
-
-
- /*
- * Signale qu'on s'intresse ici
l'affectation des voies:
- */
- fputs( "\r\n[ Affectation des voies: ]\r\n\r\n", fstream ); /* Commentaire */
-
- /*
- * Parcourt les ports:
- */
- curr_voie = G_voies;
- while( curr_voie != NULL )
- {
- /*
- * Offset:
- */
- /* TRACE2( "Voie %d; device %d", curr_voie -> no_voie, curr_voie -> device ); */
- dev_offset = device_offset( curr_voie -> device );
-
- /*
- * Sauve no voie:
- */
- fprintf( fstream, "VOIE %03d:", curr_voie -> no_voie );
-
- /*
- * Sauve port affect:
- */
- fwrite( &G_inst_abrev[ dev_offset ], sizeof( long ), 1, fstream );
- fputc( ',', fstream );
-
- /*
- * Sauve mode:
- */
- fwrite( &G_abrev_mode[ curr_voie -> mode ], sizeof( long ), 1, fstream );
-
- fprintf( fstream, G_crlf );
-
- /*
- * Passe
la voie suivante:
- */
- curr_voie = curr_voie -> next;
- }
- }
- }
-
-
- /*
- * autoload_ini(-)
- *
- * Purpose:
- * --------
- * Chargement automatique de la configuration dans STUT_ver.INI
- * lors du lancement de STUT ONE
- *
- * Algorythm:
- * ----------
- * -Cre path fichier ds dir de lancement
- * -Appele 'load()' -> load_ini()
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void autoload_ini( void )
- {
- /*
- * Variables:
- */
- FTA fta; /* File Transfer Area */
-
- /*
- * Fixe le chemin d'accs et le nom du fichier:
- */
- strcpy( G_filepath, G_stutpath ); /* Dans le dossier STUT ONE */
- strcpy( G_filename, "STUT_000.INI" ); /* Nom du Fichier
charger */
-
- /*
- * Charge fichier STUT_ver.INI
- */
- directload_file2( FS_INI, &fta, NO0 ); /* Charge slt si le fichier existe */
- }
-
-
- /*
- * load_ini(-)
- *
- * Purpose:
- * --------
- * Chargement des donnes pt par pt depuis le fichier .INI:
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void load_ini( FILE *fstream )
- {
- char * instr; /* Instruction
traiter */
- char * object; /* Donne
modifier */
- char * data; /* Contenu
charger */
- char * separat; /* Sparateur de paramtres: */
- /* ATTENTION, ces variables vont en fait pointer dans G_xxx_buffer, ne pas faire de free */
-
- VOIE * voies; /* (Nouvelle) liste des voies */
- VOIE ** last_ptr_to_next = &voies;
- VOIE * curr_voie; /* Voie en cours de cration: */
- int device; /* Priph concern */
- long abrev_mode; /* Abrev mode de fonctonnement... */
- int mode; /* Mode de fonctionnement de la voie courante */
- int nb_voies = 0; /* Nbre de voies charges */
-
-
- /*
- * Contrle le header:
- */
- int n_Version = head_control( fstream, FS_INI, "Configuration" );
-
- /*
- * Contrle le no de version:
- */
- switch( n_Version )
- {
- case 0x0000:
- break;
-
- case ERROR_1:
- /*
- * Chargement
chou dans le header:
- */
- return;
-
- default:
- /*
- * Chargement
chou
- */
- alert( BAD_VERSION );
- return;
- }
-
- /*
- * Si le header est correct:
- * Boucle de chargement:
- */
- while( !feof( fstream ) )
- { /*
- * Tant qu'on est pas
la fin du fichier:
- * Charge une instruction:
- */
- instr = get_config_line( fstream, ':', &object, &data );
-
- /*
- * Test de l'instruction
traiter:
- */
- if ( instr != NULL )
- { /*
- * S'il y a une instruction:
- */
- if ( strcmp( instr, "PORT" ) == 0 )
- { /*
- * ----------------------
- * Fixe paramtres srie:
- * ----------------------
- */
- serial_ini( object, data );
- }
- else if ( strcmp( instr, "VOIE" ) == 0 )
- { /*
- * -----------------------------
- * Fixe l'affectation des voies:
- * -----------------------------
- */
- /* printf("obj=%s dat=%s\n", object, data ); */
-
- /*
- * Recherche virgule:
- */
- separat = strchr( data, ',' );
-
- if ( object == NULL || separat == NULL )
- {
- signale( "Format ligne invalide" );
- }
- else
- { /* Si on a indiqu un numro de voie: */
- /* et qu'on a trouv une virgule de sparation des paramtres: */
-
- /* Prcaution: spare les 2 paramtres: */
- /* On en profite pour faire pointer separat sur le 2me param */
- *(separat++) = '\0';
-
- /* Cherche port concern: */
- device = find_device_byabrev( data );
-
- if ( device == NIL )
- {
- signale( "Affectation Voie: Port inconnu" );
- }
- else
- { /*
- * Si on a trouv le port concern:
- * Cration de la cnx logique:
- */
- curr_voie = Construct_Voie( );
-
- /*
- * Numro de la voie:
- */
- curr_voie -> no_voie = atoi( object );
-
- /*
- * Port utilis:
- */
- curr_voie -> device = device;
-
- /*
- * Cre un Long Int contenant le codename du mode:
- */
- abrev_mode = ( ((unsigned long)separat[0]) <<24)
- | ( ((unsigned long)separat[1]) <<16)
- | ( ((unsigned long)separat[2]) <<8)
- | ( (unsigned long)separat[3]);
-
- /*
- * Cherche mode de fonctionnement:
- */
- for ( mode = 0; mode < NB_VMODES; mode ++ )
- {
- if ( G_abrev_mode[ mode ] == abrev_mode )
- { /*
- * Si on a trouv l'abrev correspondante:
- */
- curr_voie -> mode = mode; /* Mode de fonctionnement */
- break;
- }
- }
- if ( mode == NB_VMODES )
- { /*
- * Si on a pas trouv:
- */
- signale( "On a pas trouv le bon mode" );
- curr_voie -> mode = VMODE_NORMAL; /* Mode de fonctionnement */
- }
-
-
- /*
- * Autres initialisations:
- */
- voie_phase_init( curr_voie, TRUE_1 ); /* Met en INIT */
-
- /*
- * Lien entre voie prcdente et celle-ci
- */
- *last_ptr_to_next = curr_voie;
- /*
- * Pour la prochaine voie:
- */
- last_ptr_to_next = &(curr_voie -> next);
-
- /*
- * Une voie de +
- */
- nb_voies ++;
- }
- }
- }
- else
- {
- ping();
- printf("\nInstruction inconnue: %s", instr );
- }
- }
- }
-
- /*
- * Il n'y a plus de voie aprs la dernire charge:
- */
- *last_ptr_to_next = NULL; /* Pas d'autre voie (pour l'instant) */
-
- /*
- * Teste si on a charge une liste de voies:
- */
- if ( voies != NULL )
- { /*
- * Si on a charg une nouvelle liste:
- * Vrifie qu'il n'y a pas dj
une liste de voies en mmoire:
- */
- if ( G_voies != NULL )
- {
- signale( "Il ne devrait pas encore y avoir de voies en mmoire!!!!" );
- /*
- * Mais c'est sans gravit puisqu'on va les effacer:
- * Efface les voies en mmoire:
- */
- free_voies( G_voies );
- }
-
- /*
- * Assigne nouvelle liste de voies:
- */
- G_voies = voies; /* Adr liste */
- G_nb_voies = nb_voies; /* Nbre de voies */
-
- }
-
- }
-
-
-
- /*
- * ------------ TRAITEMENT FICHIER .INF (Params serveur) ---------------
- */
-
-
- /*
- * autoload_inf(-)
- *
- * Purpose:
- * --------
- * Chargement automatique depuis le fichier STUT_ver.INF
- * des chemins d'accs d'un serveur et des fichiers
- * concerns lors du lancement de STUT ONE
- *
- * Algorythm:
- * ----------
- * - Signale qu'il n'y a pas de serv en RAM
initialiser au pralable
- * - Cre path ds dossier de lancement
- * - Appele 'load()'
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void autoload_inf( void )
- {
- /* Variables: */
- FTA fta; /* File Transfer Area */
-
- /*
- * Signale qu'il faut PAS initialiser un serveur rsident
- * (puisqu'il n'y en a pas encore eu):
- */
- fta .param = NO0;
-
- /* Fixe le chemin d'accs et le nom du fichier: */
- strcpy( G_filepath, G_stutpath ); /* Dans le dossier STUT ONE */
- strcpy( G_filename, "STUT_000.INF" ); /* Nom du Fichier
charger */
-
- /* Charge fichier STUT_ver.INF */
- directload_file2( FS_INF, &fta, NO0 ); /* Charge slt si le fichier existe */
- }
-
-
- /*
- * charger_param_inf(-)
- *
- * Purpose:
- * --------
- * Suite
slection menu:
- * Traite demande de Chargement des chemins d'accs d'un serveur,
- * et des fichiers concerns ds fichier .INF
- *
- * Algorythm:
- * ----------
- * - Si ncessaire: Dem conf pour INITIALISER le serv actuellement en RAM
- * - Appele 'load()'
- *
- * History:
- * --------
- * 1993: fplanque: Created
- * 22.01.95: controle no de version
- */
- void charger_param_inf( void )
- {
- /*
- * Vrifie si le serveur a t modifi:
- */
- int confirm = 0; /* Confirmation? */
-
- /*
- * Selon statut serveur:
- */
- switch( get_ServSState( ) )
- {
- case SSTATE_SAVED:
- confirm = form_alert( 1,
- "[2][Pour charger un nouveau|"
- "serveur en mmoire, vous|"
- "devez d'abord en supprimer|"
- "l'ACTUEL. Voulez-vous|"
- "l'INITIALISER maintenant?]"
- "[Init.|Annuler]" );
- break;
-
- case SSTATE_MODIFIED:
- confirm = form_alert( 2,
- "[3][ATTENTION: Vous tes sur le|"
- "point d'CRASER le serveur|"
- "actuellement en mmoire alors|"
- "que certaines MODIFICATIONS|"
- "n'ont pas t sauves!]"
- "[craser|Annuler]" );
- break;
- }
-
-
- /*
- * Selon rponse utilisateur (si question il y a eu)
- */
- if ( confirm < 2 )
- { /*
- * Si on a pas annul:
- */
- FTA fta; /* File Transfer Area */
-
- /*
- * Signale s'il faut initialiser un serveur rsident ou non:
- */
- fta .param = confirm; /* (Astuce) 0=NON, 1=OUI */
-
- /*
- * Slection, (Initialise si ncessaire) et charge fichier *.INF
- */
- load_file( "Charger Paramtres Serveur", FS_INF, &fta );
-
- }
-
- }
-
-
- /*
- * load_inf(-)
- *
- * Purpose:
- * --------
- * Chargement des donnes pt par pt depuis le fichier .INF
- *
- * Algorythm:
- * ----------
- * - deselect icne courante!!!!!
- * - Contrle header
- * - Charge lignes d'instructions
- * - Si ligne correspond a une association de fichier
un groupe:
- * charge le fichier correspondant pour:
- * - arbo
- * - pages vdt
- * - bases de donnes
- *
- * Suggest:
- * --------
- * Sortir la dselect icne courante, ce n'est pas une bonne place
- * du point de vue de l'intgrit fonctionnelle...
- *
- * History:
- * --------
- * 1993: fplanque: Created
- * 19.06.94: chgt des textes
- * 22.01.95: controle no de version
- */
- void load_inf( FILE *fstream )
- {
- int n_Version;
-
- /*
- * Dslectionne icne courante:
- */
- deselect_current();
-
- /*
- * Contrle le header:
- */
- n_Version = head_control( fstream, FS_INF, "Paramtres-Serveur" );
-
- /*
- * Contrle le no de version:
- */
- switch( n_Version )
- {
- case 0x0000:
- break;
-
- case ERROR_1:
- /*
- * Chargement
chou dans le header:
- */
- return;
-
- default:
- /*
- * Chargement
chou
- */
- alert( BAD_VERSION );
- return;
- }
-
- /*
- * Si le header est correct:
- */
- { /*
- * Variables:
- */
- char *instr; /* Action a effectuer */
- char *object; /* Donne
modifier */
- char *data; /* Contenu
charger */
- /* ATTENTION, ces variables vont en fait pointer dans M_buffer, ne pas faire de free */
-
- /*
- * Boucle de chargement:
- */
- while ( !feof( fstream ) )
- { /* Tant qu'on est pas
la fin du fichier: */
- instr = get_config_line( fstream, '=', &object, &data );
-
- /* Test de l'instruction
traiter: */
- if ( instr != NULL )
- { /* S'il y a une instruction: */
-
- if ( strcmp( instr, "GROUP") == 0 )
- { /*
- * Assignement d'un fichier
un groupe:
- */
-
- if ( object != NULL )
- {
- /*
- * Cherche l'instr concerne:
- */
- if ( strcmp( object, "ARB:" ) == 0 )
- { /*
- * Chargement des pages arbo
- */
- group_directload( find_datagroup_byType( DTYP_ARBO ), FS_ARBO, data );
- }
- else if ( strcmp( object, "ECR:" ) == 0 )
- { /*
- * Chargement des pages cran
- */
- group_directload( find_datagroup_byType( DTYP_PAGES ), GF_PAGES_ECRAN, data );
- }
- else if ( strcmp( object, "DAT:" ) == 0 )
- { /*
- * Chargement des bases de donnes:
- */
- group_directload( find_datagroup_byType( DTYP_DATAS ), FS_DATAS, data );
- }
- else if ( strcmp( object, "TXT:" ) == 0 )
- { /*
- * Chargement des textes:
- */
- group_directload( find_datagroup_byType( DTYP_TEXTS ), FS_TEXTES, data );
- }
- }
- else
- {
- signale("Ligne non valide");
- }
- }
- else
- {
- signale("Instruction inconnue");
- }
- }
- }
- }
- }
-
-
- /*
- * sauver_param_inf(-)
- *
- * Purpose:
- * --------
- * Suite
slection menu:
- * Traite demande de Sauvegarde des chemins d'accs d'un serveur
- * dans fichier .INF
- *
- * Algorythm:
- * ----------
- * - Demande confirm/type (param dfaut ou fichier indpendant)
- * - Cre nom si dfaut
- * - Appele 'sauve()' -> save_infdata()
- *
- * Notes:
- * ------
- *
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void sauver_param_inf( void )
- {
- /*
- * Demande de confirmation:
- */
- int confirm = form_alert(2,
- "[2][ Voulez-vous sauver les|"
- " paramtres-serveur par|"
- " dfaut ou un fichier de|"
- " paramtres indpendant?]"
- "[Dfaut|Indpend|Annuler]");
-
- /*
- * Selon rponse utilisateur:
- */
- switch ( confirm )
- {
- case 1: /* Paramtres par dfaut: */
- strcpy( G_filepath, G_stutpath ); /* Dans le dossier STUT ONE */
- strcpy( G_filename, "STUT_000.INF" ); /* Nom du Fichier
sauver */
- /* printf("Path=%s Name=%s \n", G_filepath, G_filename ); */
-
- directsave_file( FS_INF, NULL ); /* Sauve les infos du serveur courant dans ce fichier */
- break;
-
- case 2: /* Indpendant */
- save_file( "Sauver Parmtres-Serveur", FS_INF, NULL );
- break;
- }
- }
-
-
- /*
- * save_infdata(-)
- *
- * Purpose:
- * --------
- * Sauvegarde des donnes pt par pt dans les fichier .INF
- *
- * Algorythm:
- * ----------
- * Sauve:
- * -Chemins d'accs aux fichiers serveur
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void save_infdata( FILE *fstream )
- {
- int i;
- DATAGROUP *datagroup; /* Datagroup en cours de traitement */
-
- /* Commentaire: */
- fputs( "\r\n[ Chemins d'accs aux fichiers serveur: ]\r\n\r\n", fstream );
-
- /* Sauve chemins d'accs serveur: */
- for ( i = 0; i < NB_DATAGROUPS; i++ )
- {
- datagroup = &G_datagroups[ i ]; /* Datagroup
traiter */
- if ( datagroup -> filepath != NULL )
- { /* Si le Datagroup en question
un chemin+fichier associ: */
- fprintf( fstream, "GROUP %s=%s\\%s\r\n",
- datagroup -> data_device, /* Nom du groupe */
- datagroup -> filepath, /* Path */
- datagroup -> filename ); /* Fichier */
- }
- }
- }
-
-
-
- /*
- * ------------ AFFECTATION DES VOIES UTILISEES PAR LE SERV ---------------
- */
-
-
- /*
- * affecte_voies(-)
- *
- * Purpose:
- * --------
- * Affectation des voies utilises par le serveur
- *
- * Algorythm:
- * ----------
- * - Duplique la liste chane d'infos sur les voies.
- * (La copie peut alors tre modifie, tendue, diminue tout
- * en conservant la possibilit d'annuler ultrieurement)
- * - Cre une liste textuelle des voies
- * utilise cree_ligne_voie()
- * - Eteinds fonctions non dispo tant qu'aucune ligne de la liste
- * textuelle n'est slectionn
- * - DIALOGUE avec utilisateur: select_in_list() ~> affecte_actions()
- * - Libre liste textuelle
- * - Selon rsultat dialogue: on garde l'une ou l'autre des
- * listes chanes compltes
- *
- * Suggest:
- * --------
- * Le param M_voie_copies devrait etre integre ds list_handles
- *
- * History:
- * --------
- * 1993: fplanque: Created
- * 04.01.94: nouveau format d'appel de select_in_list()
- */
- void affecte_voies( const GRECT *start_box )
- {
- /*
- * Pointeurs:
- */
- VOIE *curr_voie; /* Voie en cours de traitement */
- char * *param_array; /* Tableau de ptr sur chaines */
-
- /*
- * Variables:
- */
- int i; /* Compteur */
- int nb_lignes = G_nb_voies; /* Nbre de lignes = Nb voies
l'origine */
-
- static int esc_objs[]={ AFFECAJ, AFFECMOD, AFFECSUP, AFFECVAL, AFFECANN, NIL };
- int exit_obj; /* Objet de sortie */
- GRECT form_box; /* Dimensions du formulaire */
-
-
-
- /*
- * Duplique la liste chaine des infos compltes sur les
- * voies pour l'dition (on gardera l'une ou l'autre selon que
- * l'utilisateur confirme ou annule):
- */
- M_voies_copies = dup_voies( G_voies );
-
-
-
- /*
- * Cration liste textuelle des voies:
- */
- param_array = (char * *) MALLOC( sizeof( char* ) * nb_lignes );
- curr_voie = M_voies_copies; /* Ptr sur 1ere voie */
- for ( i=0; i<nb_lignes; i++ )
- {
- /* Cre une ligne sur la voie et sauve ptr ds tableau: */
- param_array[ i ] = cree_ligne_voie( curr_voie );
-
- /* Voie suivante: */
- curr_voie = curr_voie -> next;
- }
-
-
- /*
- * "Eteind" fonctions non (encore) disponibles:
- */
- objc_setdisable( M_affect_adr, AFFECMOD );
- objc_setdisable( M_affect_adr, AFFECSUP );
-
-
- /*
- * Bote de Dialogue avec utilisateur:
- */
- /* App prend en charge souris */
- WIND_UPDATE_BEG_MCTRL
-
- exit_obj = select_in_list(
- M_affect_adr,
- start_box,
- &form_box,
- ¶m_array,
- &nb_lignes,
- esc_objs,
- affecte_actions, /* Ptr sur func de ttmnt des actions */
- affec_fixstate_act, /* Ptr sur func
appeller pour allumer/eteindre boutons d'actions */
- 0 );
-
- /* AES peut reprendre la souris */
- WIND_UPDATE_END_MCTRL
-
-
- /*
- * Libre liste textuelle:
- */
- for ( i=0; i<nb_lignes; i++ )
- {
- FREE( param_array[ i ] );
- }
- FREE( param_array );
-
-
- /*
- * Teste s'il y a eu confirmation -> Prise en compte modifs:
- */
- if ( exit_obj == AFFECVAL )
- { /*
- * Si on a valid:
- */
-
- /*
- * Efface les anciennes donnes:
- */
- free_voies( G_voies );
-
- /*
- * Valide les nouvelles:
- */
- G_voies = M_voies_copies;
-
- /*
- * Compte le nbre de voies:
- */
- G_nb_voies = 0;
- curr_voie = G_voies;
- while( curr_voie != NULL )
- {
- G_nb_voies ++;
- curr_voie = curr_voie -> next;
- }
-
- }
- else
- { /*
- * Si on a annul:
- */
-
- /*
- * Efface simplement la copie des donnes:
- */
- free_voies( M_voies_copies );
-
- }
-
- /*
- * Safety: On ne doit plus utiliser la copie:
- */
- M_voies_copies = NULL;
-
- }
-
-
-
- /*
- * affecte_actions(-)
- *
- * Purpose:
- * --------
- * Traitement des objets exit du formulaire affich par
- * affecte_voies()
- *
- * Algorythm:
- * ----------
- * - Si on a cliqu sur un nom: RIEN
- * - Si on a cliqu sur un bouton d'action:
- * Traite le cas appropri au bouton
- * - Valider/Annuler: quitter dialogue
- * - Ajouter une voie
- *
- * Notes:
- * ------
- * On ne fait RIEN lorsque l'on clique sur un elt ds la liste...
- *
- * History:
- * --------
- * 1993: fplanque: Created
- * 04.01.94: l'allumage des bout d'actions lors de la sel d'un elt se fait dsormais hors-d'ici
- * 05.01.94: ajout de la <suppression d'une voie>
- * 07.01.95: gestion double click
- */
- int affecte_actions( /* Out: FALSE0 : Il faut terminer le dialogue
- * TRUE_1 : Il faut continuer le dialogue normalement
- * CHANGE_2 : Continue, MAIS ATTENTION: La liste a chang
- */
- LISTHANDLES *list_handles, /* In: Ptr sur infos sur la liste & le dialogue affichs */
- int obj ) /* In: Objet du form sur lequel on a cliqu */
- {
- if( obj & SEL_LINE )
- {
- if( obj & DBLE_CLICLK )
- { /*
- * Si on a double cliqu sur un nom:
- * Dialogue de config des voies:
- */
- Affecte_ParamsVoie( list_handles, M_affect_adr, AFFECMOD );
- }
- }
- else
- { /*
- * Si on a cliqu sur un bouton d'action:
- */
- switch( obj )
- { /*
- * Selon le bouton sur lequel on a cliqu:
- */
- case AFFECVAL: /* Valider */
- case AFFECANN: /* Annuler */
- return FALSE0; /* Met fin au dialogue */
-
- case AFFECAJ: /* Ajouter une voie: */
- /*
- * Ajoute une voie complte
la liste chaine
- */
- ajoute_voie( list_handles );
-
- /*
- * "Allume" nlles ations disponibles:
- */
- affec_fixstate_act( list_handles );
-
- return CHANGE_2; /* On a chang la liste, il va falloir rafficher et initialiser variables */
-
- case AFFECMOD: /* Modifier les params d'une voie: */
- /*
- * Dialogue de config des voies:
- */
- Affecte_ParamsVoie( list_handles, M_affect_adr, AFFECMOD );
-
- return TRUE_1;
-
- case AFFECSUP: /* Supprimer une voie: */
- /*
- * Supprime une voie complte de la liste chaine
- */
- supprime_voie( list_handles );
-
- /*
- * "Eteinds" ations eventuellement devenues indisponibles:
- * (Bouton "Supprimer" uniquement)
- */
- affec_fixstate_act( list_handles );
-
- return CHANGE_2; /* On a chang la liste, il va falloir rafficher et initialiser variables */
-
- default:
- ping();
- }
-
- }
-
- return TRUE_1; /* Continue dialogue */
- }
-
-
-
- /*
- * ParamsVoie(-)
- *
- * Purpose:
- * --------
- * Paramtres d'une voie
- *
- * Algorythm:
- * ----------
- * Cherche voie concerne dans la copie de liste de voies
- * Modifie les valeurs suivantes:
- * no_voie
- * device
- * mode
- *
- * Notes:
- * ------
- * On ne peut pour l'instant diter le no de la voie!
- *
- * History:
- * --------
- * 10.05.94: fplanque: Created based on parapg_parasortie(-)
- */
- void Affecte_ParamsVoie(
- LISTHANDLES *list_handles, /* In: Infos sur liste de voies */
- OBJECT *arbre_fond, /* In: Formulaire appellant */
- int call_obj ) /* In: Objet appellant ds ce formulaire */
- {
- /*
- * Ligne/Champ concern:
- */
- int concerned_line = get_no_selitem( list_handles );
-
- /*
- * Ptrs sur Objets formulaire:
- */
- char* pT_NoVoie = (M_pForm_ParamsVoie[ VOIENUM ] .ob_spec.tedinfo) -> te_ptext;
- OBJECT* pOb_Port = &M_pForm_ParamsVoie[ VOIEPORT ];
- OBJECT* pOb_Mode = &M_pForm_ParamsVoie[ VOIEMODE ];
-
- /*
- * Trouve les parametres de la voie concerne:
- */
- VOIE* pVoie_Params = find_ParamsVoie_byOrdNo( M_voies_copies, concerned_line );
-
- /*
- * Variables:
- */
- int n_NoVoie = pVoie_Params -> no_voie;
- int n_Device = pVoie_Params -> device; /* Device de la voie dite */
- int n_Mode = pVoie_Params -> mode;
- int edit_obj = NIL_1; /* Objet en cours d'dition */
- int exit_obj; /* Bouton Exit cliqu */
- GRECT start_box, form_box;
-
- /*
- * Fixe les valeurs dans le formulaire:
- */
- /* No de la voie: */
- itoa( n_NoVoie, pT_NoVoie, 10 ); /* Conversion dcimale */
- /* Nom du port (Pop-Up): */
- fix_popup_title( pOb_Port, G_inst_drv_list, n_Device );
- /* Mode de fonctionnement: */
- fix_popup_title( pOb_Mode, G_Popup_Modes, n_Mode );
-
-
- /*
- * Gestion formulaire:
- */
- /* Coord de dpart du grow_box= */
- objc_xywh( arbre_fond, call_obj, &start_box );
- /*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
- open_dialog( M_pForm_ParamsVoie, &start_box, &form_box );
-
- while(1)
- { /*
- * Gestion form jusqu'
un clic sur objet exit
- */
- exit_obj = ext_form_do( M_pForm_ParamsVoie, &edit_obj);
- /* exit_obj &= 0x7FFF; /* Masque bit 15 (Double-clic) */
-
- /*
- * Teste si on cherche
sortir:
- */
- if ( exit_obj == VOIEVAL || exit_obj == VOIEANN )
- break;
-
- /*
- * Traitement des autres boutons:
- */
- switch( exit_obj )
- {
- case VOIEPORT:
- case VOIPORUP:
- { /*
- * Slection du port utilis par la voie:
- */
- int selected; /* Ligne slectionne */
- POPUP_ENTRY *entries; /* Liste pour menu: */
-
- /*
- * Fix Ptr sur liste approprie (Drivers installs):
- */
- entries = G_inst_drv_list;
-
- /*
- * Appelle le Pop-Up:
- */
- selected = popup_inform(
- M_pForm_ParamsVoie, exit_obj, VOIEPORT,
- entries, n_Device );
- if ( selected != ABORT_2 )
- {
- n_Device = selected;
- fix_popup_title( pOb_Port, entries, n_Device );
- objc_draw( M_pForm_ParamsVoie, VOIEPORT, 1,
- form_box .g_x, form_box .g_y,
- form_box .g_w, form_box .g_h );
- }
- break;
- }
-
- case VOIEMODE:
- case VOIMODUP:
- { /*
- * Slection du mode de fonctionnement de la voie:
- */
- int selected; /* Ligne slectionne */
- POPUP_ENTRY *entries; /* Liste pour menu: */
-
- /*
- * Fix Ptr sur liste approprie (Drivers installs):
- */
- entries = G_Popup_Modes;
-
- /*
- * Appelle le Pop-Up:
- */
- selected = popup_inform(
- M_pForm_ParamsVoie, exit_obj, VOIEMODE,
- entries, n_Mode );
- if ( selected != ABORT_2 )
- {
- n_Mode = selected;
- fix_popup_title( pOb_Mode, entries, n_Mode );
- objc_draw( M_pForm_ParamsVoie, VOIEMODE, 1,
- form_box .g_x, form_box .g_y,
- form_box .g_w, form_box .g_h );
- }
- break;
- }
-
- default:
- ping();
- }
-
-
- /* Dslection du bouton slectionn: */
- /* objc_dsel( M_pForm_ParamsVoie, exit_obj ); */
-
- graf_mouse( ARROW, 0); /* souris: Flche */
- }
-
- graf_mouse( BUSYBEE, 0); /* souris: Abeille */
- close_dialog( M_pForm_ParamsVoie, exit_obj, &start_box, &form_box );
- /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
-
- /*
- * Dslectionne bouton de sortie:
- */
- objc_clrsel( M_pForm_ParamsVoie, exit_obj );
-
- /*
- * Redssinne le fond:
- */
- objc_draw( arbre_fond, 0, 5, form_box .g_x, form_box .g_y, form_box .g_w, form_box .g_h );
-
- /*
- * Sauvegarde des valeurs dites:
- */
- if ( exit_obj == VOIEVAL )
- { /*
- * Si on a confirm:
- */
- /*
- * Variables:
- */
- char * *path_array = *(list_handles -> pTpsz_array);
- char * *resume = &path_array[ concerned_line ]; /* Rsum des paramtres */
-
- /*
- * Sauvegarde modifs:
- */
- pVoie_Params -> device = n_Device; /* Device de la voie dite */
- pVoie_Params -> mode = n_Mode;
-
- /*
- * Modifie la ligne dans le formulaire:
- * Efface ancienne ligne:
- */
- if ( *resume != G_empty_string ) /* Si pas dj
vide: */
- {
- FREE( *resume ); /* Libre ancien contenu */
- }
- /*
- * Cre nouvelle ligne et place ptr dans tableau:
- */
- *resume = cree_ligne_voie( pVoie_Params );
- /*
- * Fixe nlle ligne
- */
- list_fix1name( M_affect_adr, list_handles -> selected_line, *resume );
-
- }
-
- }
-
-
-
- /*
- * find_ParamsVoie_byOrdNo(-)
- *
- * Purpose:
- * --------
- * Trouve les parametres d'une voie en fnct de son numro d'ordre
- * dans la liste des voies
- *
- * History:
- * --------
- * 10.05.94: fplanque: Cration base sur find_fieldpar_byordno
- */
- VOIE* find_ParamsVoie_byOrdNo( /* Out: Ptr sur params voie cherche */
- VOIE *pVoie_Liste, /* In: Ptr sur premire voie ds liste */
- int ord ) /* In: No d'ordre de la voie cherche */
- {
- int i=0; /* Compteur */
-
- while( i < ord && pVoie_Liste != NULL )
- { /*
- * Tant qu'on est pas arriv au champ qui nous intresse
- * et qu'on est pas
la fin de la liste:
- */
- /*
- * Passe au champ suivant:
- */
- i ++;
- pVoie_Liste = pVoie_Liste -> next;
- }
-
- return pVoie_Liste; /* Ptr sur params; NULL si pas trouv */
- }
-
-
-
- /*
- * affec_fixstate_act(-)
- *
- * Purpose:
- * --------
- * Selon qu'une voie est courament selectionne ds la liste textuelle:
- * Allume ou eteind en direct les boutons d'action associs.
- *
- * Algorythm:
- * ----------
- * - Dtermine si une ligne est slectionne...
- * - Allume/Eteind les boutons:
- * - MODIFIER
- * - SUPPRIMER (Allume Seulement si + d'une voie ds la liste: on ne
- * peut supprimer la dernire)
- *
- * History:
- * --------
- * 03.01.94: fplanque: Created pour allulage seulement
- * 04.01.94: fplanque: Reconnaissance auto allumage/extinction
- */
- void affec_fixstate_act( /* Out: Rien */
- LISTHANDLES *list_handles ) /* In: Ptr sur infos sur la liste & le dialogue affichs */
- {
-
- if( list_handles -> selected_line != NIL )
- { /*
- * S'il y a une ligne slectionne: il faut ALLUMER:
- */
-
- /*
- * Bouton MODIFIER:
- */
- objc_enable( M_affect_adr, AFFECMOD );
-
- /*
- * Bouton SUPPRIMER:
- */
- if ( list_handles -> nb_items > 1 )
- { /*
- * On ne pourrait effacer la dernire voie!
- * S'il y en a donc plus d'une:
- */
- objc_enable( M_affect_adr, AFFECSUP );
- }
- else
- { /*
- * Si 1 seule voie est prsente:
- * On ne peut l'effacer
- */
- objc_disable( M_affect_adr, AFFECSUP );
- }
- }
- else
- { /*
- * S'il n'y a PAS de ligne slectionne: il faut ETEINDRE:
- */
- objc_disable( M_affect_adr, AFFECMOD );
- objc_disable( M_affect_adr, AFFECSUP );
- }
- }
-
-
-
-
-
-
- /*
- * cree_ligne_voie(-)
- *
- * Purpose:
- * --------
- * Cre une ligne d'infos sur une voie pour l'insrer
- * ds liste d'affectations
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- char *cree_ligne_voie( VOIE *curr_voie )
- {
- int dev_offset = device_offset( curr_voie -> device );
-
- /*
- * Cre une chaine rsumant les paramtres principaux
- */
- sprintf( G_tmp_buffer, "Voie %03d: Port=%-10sMode=%s",
- curr_voie -> no_voie,
- G_inst_drv_list[ dev_offset ] .name +2,
- G_mode[ curr_voie -> mode ] );
-
- /*
- * Retourne adresse d'une copie de la chaine cre:
- */
- /* printf("%s long=%lu\n", G_tmp_buffer, strlen(G_tmp_buffer) ); */
- return STRDUP(G_tmp_buffer);
- }
-
-
- /*
- * ajoute_voie(-)
- *
- * Purpose:
- * --------
- * Ajoute 1 voie
la liste d'affectations
- *
- * Algorythm:
- * ----------
- * - Cherche premier no libre
attribuer
la nouvelle voie
- * - Alloue nouvelle voie complete, l'initialise et l'insre
- * ds liste chaine des voie
l'endroit correspondant
son no.
- * - Ajoute la ligne correspondante dans la liste de slection textuelle associe
- * - Slectionne cette nouvelle voie
- *
- * History:
- * --------
- * 1993: fplanque: Created
- * 05.01.93: Modif de la position auto de la partie visible sur nlle voie: on peut maintenant aussi remonter
- */
- void ajoute_voie( LISTHANDLES *list_handles )
- {
- /*
- * Pointeurs:
- */
- VOIE *curr_voie = M_voies_copies; /* Voie en cours de traitement */
- VOIE * *last_ptr_tonext = &M_voies_copies;
- VOIE *new_voie;
- char * *param_array;
-
- /*
- * Variables:
- */
- int new_no_voie = 1;
- int nb_items;
- int selected_line;
-
- /*
- * Cherche no
attribuer par dfaut
la nlle voie:
- */
- while ( curr_voie != NULL
- && curr_voie -> no_voie == new_no_voie )
- {
- new_no_voie ++; /* Ce no ne convient pas, on passe au suivant */
- last_ptr_tonext = &(curr_voie -> next);
- curr_voie = curr_voie -> next;
- }
-
- /*
- * ------------------------------
- * Alloue nouvelle voie complte:
- * ------------------------------
- */
- new_voie = Construct_Voie( );
- /*
- * Init paramtres:
- */
- new_voie -> no_voie = new_no_voie; /* Numro de la voie */
- new_voie -> device = G_term_dev; /* Port terminal par dfaut */
- new_voie -> mode = VMODE_NORMAL; /* Mode de fonctionnement */
- voie_phase_init( new_voie, TRUE_1 ); /* Met la voie en phase INIT */
-
- /*
- * Liaison avec le reste:
- */
- new_voie -> next = curr_voie;
- *last_ptr_tonext = new_voie;
-
- /*
- * -------------------------------------------------------
- * Une ligne de plus dans la liste de slection textuelle:
- * -------------------------------------------------------
- */
- (list_handles -> nb_items) ++; /* 1 elt de plus */
- nb_items = list_handles -> nb_items;
-
- /*
- * Agrandi la liste:
- */
- param_array = (char * *) REALLOC( *(list_handles -> pTpsz_array), nb_items * sizeof( char * ) );
- *(list_handles -> pTpsz_array) = param_array;
- /*
- * Dcale la fin de la liste:
- */
- if ( new_no_voie < nb_items )
- { /*
- * S'il y a qque chose
dcaler:
- */
- memcpy( ¶m_array[ new_no_voie ], ¶m_array[ new_no_voie - 1 ], (nb_items - new_no_voie) * sizeof( char * ) );
- }
- /*
- * Cre une nouvelle ligne dans la liste:
- */
- param_array[ new_no_voie - 1 ] = cree_ligne_voie( new_voie );
-
- /*
- * Nouvelle ligne slectionne:
- */
- selected_line = new_no_voie - list_handles -> top_item -1 + list_handles -> first_name;
-
- /*
- * Vrifie qu'on est dans la partie visible:
- */
- if ( selected_line > list_handles -> last_name )
- { /*
- * Si on est trop haut:
- * On va dscendre l'affichage dans la liste:
- */
- list_handles -> top_item += selected_line - list_handles -> last_name;
- selected_line = list_handles -> last_name;
- }
- else if( selected_line < list_handles -> first_name )
- { /*
- * Si on est trop bas:
- * On va monter l'affichage dans la liste:
- */
- list_handles -> top_item -= list_handles -> first_name - selected_line;
- selected_line = list_handles -> first_name;
- }
-
- list_handles -> selected_line = selected_line;
-
-
- }
-
-
- /*
- * supprime_voie(-)
- *
- * Purpose:
- * --------
- * Supprime 1 voie de la liste d'affectations
- *
- * History:
- * --------
- * 05.01.94: fplanque: Created
- */
- void supprime_voie( /* Out: Rien */
- LISTHANDLES *list_handles ) /* In/Out: Paramtres de la liste de slection */
- {
- /*
- * Pointeurs:
- */
- VOIE *curr_voie = M_voies_copies; /* Voie en cours de traitement */
- VOIE * *last_ptr_tonext = &M_voies_copies;
- char * *select_array = *(list_handles -> pTpsz_array); /* Tableau de chaines de charactres */
-
- /*
- * Variables:
- */
- int no_selitem = get_no_selitem( list_handles ); /* No de l'elt de liste slectionn */
- int nb_items = list_handles -> nb_items;
- int count = 0; /* Compteur de voies */
-
-
- /*
- * Cherche la voie
supprimer:
- * no_selitem=0 => il faut supprimer la 1ere voie
- */
- /* printf( "\033Y!!No de l'elt slectionn ds liste textuelle: %d\n", no_selitem ); */
-
- while( count < no_selitem && curr_voie != NULL )
- {
- last_ptr_tonext = &(curr_voie -> next);
- curr_voie = curr_voie -> next; /* Passe
la voie suivante */
- count++;
- }
-
- if( curr_voie == NULL )
- ping(); /* Erreur interne! */
- else
- { /*
- * Suppression de la voie concerne:
- */
- /* printf( "No de la voie
supprimer: %d\n", curr_voie -> no_voie ); */
-
- *last_ptr_tonext = curr_voie -> next; /* Lie voie prcdente
voie suivante */
-
- FREE( curr_voie ); /* Cette voie n'est plus ds la liste, on peut l'effacer */
-
- /*
- * Supression de la ligne correspondante ds liste textuelle:
- */
- /* printf( "Supprime l'entre [%s] de la liste textuelle\n", select_array[ no_selitem ] ); */
-
- FREE( select_array[ no_selitem ] ); /* Supprime texte de la ligne */
-
- nb_items--; /* 1 elt de moins */
- (list_handles -> nb_items) --;
-
- /*
- * Dcale fin de la liste:
- */
- if ( no_selitem < nb_items )
- { /*
- * S'il y a qque chose
dcaler:
- */
- memcpy( &select_array[ no_selitem ], &select_array[ no_selitem +1 ],
- (nb_items - no_selitem) * sizeof( char * ) );
- }
-
- /*
- * Reduit la mmoire oqp par liste:
- */
- *(list_handles -> pTpsz_array) =
- (char * *) REALLOC( *(list_handles -> pTpsz_array),
- nb_items * sizeof( char * ) );
-
- /*
- * Il n'y a plus de ligne slectionne:
- */
- list_handles -> selected_line = NIL;
-
-
- /*
- * Contrle si on a cr une ligne blanche
l'cran:
- */
- if ( nb_items <= list_handles -> top_item + list_handles -> last_name - list_handles -> first_name)
- {
- if ( list_handles -> top_item > 0 )
- { /*
- * On est pas en haut de la liste:
- * On va la descendre pour combler la ligne blanche:
- */
- list_handles -> top_item --;
- }
- else
- { /*
- * Il y a - de lignes ds liste que physiquement affiches:
- * On vide la ligne juste aprs la (nouvelle) dernire
- * De plus, on la dslectionne au cas o c'tait celle qui tait slectionne:
- */
- OBJECT *object_ptr = &(list_handles -> form_tree[ list_handles -> first_name + nb_items ]);
-
- dlink_teptext( object_ptr, G_empty_string );
- objc_clrsel( object_ptr, 0 );
- }
- }
- }
- }
-